/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 98152
 * Date: 2024-11-18
 * Time: 23:32
 */
public class Test {
    public int tribonacci(int n) {
        //处理特殊情况
        if(n == 0) return 0;
        if(n == 1 || n == 2) return 1;

        //1.创建dp表
        int[] dp = new int[n+1];
        //2.初始化
        dp[0] = 0;
        dp[1] = dp[2] = 1;
        //3.填表
        for(int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
        }
        return dp[n];
    }
    public int tribonacci2(int n) {
        if(n == 0) return 0;
        if(n == 1 || n == 2) return 1;

        int a = 0, b = 1, c = 1, d = 0;
        for(int i = 3; i <= n; i++) {
            d = a + b + c;
            //使用滚动数组时，一定要仔细思考变量更新的顺序，以免发生覆盖
            a = b;
            b = c;
            c = d;
        }
        return d;
    }
}
